package com.company.ThreadPoolDemo;

import com.company.ThreadPoolDemo.MyRunable;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 作者  Administrator
 * 时间  2017/6/2 9:31
 * 文件  ThreadPoolsDemo
 * 描述  FixedThreadPool()

 * 定长线程池：

 * 可控制线程最大并发数（同时执行的线程数）
 * 超出的线程会在队列中等待
 */
public class ThreadPool2 {
	public static void main(String[] args) {
		/**
		 * return new ThreadPoolExecutor(nThreads, nThreads,
		 * 0L, TimeUnit.MILLISECONDS,
		 * new LinkedBlockingQueue<Runnable>());
		 * 这个队列接收到任务的时候，如果当前线程数小于核心线程数，则新建线程(核心线程)处理任务；如果当前线程数等于核心线程数，则进入队列等待
		 * 所以当前线程数肯定不会超过核心线程数
		 */
		ExecutorService tp = Executors.newFixedThreadPool(5);


		for (int i = 1; i < 11; i++) {
			tp.execute(new MyRunable(i));
		}
	}
}
/**运行结果
 * 启动===========================1===========================
 启动===========================2===========================
 启动===========================3===========================
 启动===========================4===========================
 启动===========================5===========================
 结束===========================1===========================
 启动===========================6===========================
 结束===========================2===========================
 启动===========================7===========================
 结束===========================3===========================
 启动===========================8===========================
 结束===========================4===========================
 启动===========================9===========================
 结束===========================5===========================
 启动===========================10===========================
 结束===========================6===========================
 结束===========================7===========================
 结束===========================8===========================
 结束===========================9===========================
 结束===========================10===========================
 *
 * 核心线程满了进入等待，有线程完成了，就去队列中取
 *
 * 线程结束虚拟机才结束；核心线程中的线程并没有被销毁吧
 *
 * allowCoreThreadTimeOut(默认是false哦 ，所以keepAlive的值对它无效)
 * */